<template>
  <input
    type="text"
    class="hminput"
    @input="handerInput"
    @blur="handerBlur"
    :class="{ success: statu, error: !statu }"
  />
</template>

<script>
export default {
  // rules:验证规则，msg：如果输入不合法时的提示信息
  // props: ["rules", "msg"],
  props: {
    rules: {
      type: RegExp,
    },
    msg: {
      type: String,
    },
  },
  data() {
    return {
      // 标记用户的输入是否合法
      statu: "",
    };
  },
  methods: {
    // 当用户输入数据的时候，监听用户的输入，并且使用正则表达式进行用户输入数据的验证，如果成功，则添加成功的对应的样式，否则添加错误的样式
    handerInput(e) {
      let value = e.target.value;
      if (this.rules && this.rules.test(value)) {
        this.statu = true;
      } else {
        this.statu = false;
      }
      // 子传父
      this.$emit("input", e.target.value);
    },
    // 失焦事件处理
    handerBlur(e) {
      let value = e.target.value;
      if (this.rules) {
        if (!this.rules.test(value)) {
          // console.log(this.msg);
          this.$toast.fail(this.msg);
        }
      }
    },
  },
};
</script>

<style lang='less' scoped>
.hminput {
  width: 314/360 * 100vw;
  height: 50px;
  outline: none;
  border: none;
  border-bottom: 2px solid #ccc;
  font-size: 16px;
  line-height: 50px;
  color: #000;
}
.success {
  border-bottom-color: green;
}
.error {
  border-bottom-color: red;
}
</style>